flyweight design pattern in java